<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
// Promsie.all() 静态方法

// 1. Promise.all接收一个promise数组作为参数，返回一个新的promise对象。
// const p = Promise.all([p1, p2, p3])
// 最后p的状态，由p1,p2,p3决定
// p1，p2, p3 一起执行的，并发~~

// 分两种情况
// 2.1 当p1,p2,p3都为fulfilled状态时，p的状态才会变成fulfilled(成功态、完成态)
//  p1,p2,p3的返回值，会挨个（按顺序）的组成一个新的数组，作为p的结果

// 2.2 
//  只要p1, p2, p3 有一个被rejected了，失败了，p的状态就会变成rejected，
//  第一个被rejected的promise的值（失败的原因），会作为p的结果
// ==> p.catch(err => console.log(err))

const p1 = Promise.resolve(111)
const p2 = new Promise((resolve, reject) => {
  setTimeout(() => {
    resolve(222)
  }, 2000);
})
const p3 = new Promise((resolve, reject) => {
  setTimeout(() => {
    resolve(333)
  }, 3000);
})

const p4 = Promise.reject('失败了4')
const p5 = Promise.reject('失败了5')

// 1. 所有的promise都成功了
const p = Promise.all([p1, p2, p3])

p.then(res => {
  console.log(res)
})
console.log(p)

// 2. 有一个promise失败了
const p21 = Promise.all([p1, p2, p4])
console.log(p11)
p11.then(res => {
    console.log(res)
}).catch(err => {
    console.log(err)
})

// 3. 有两个promise失败了, 第一个失败的值会作为promise.all的结果
const p22 = Promise.all([p1, p4, p5])
console.log(p22)
p22.then(res => {
  console.log(res)
}).catch(err => {
  console.log(err)
})
    </script>
</body>
</html>